module nazo.stdio;
/**
 * ubyteの配列を直接読み取り/書き込みするクラスを追加します。
 * インポートすると自動的にstd.stdioもインポートします。
 * License: Public Domain
 */
public import std.stdio;
import std.cstream, core.thread, std.contracts;

///標準入出力
class StdIo{
  ///標準入力から全て取得
  static invariant(ubyte)[] readStdIn(size_t size){
    ubyte[] re=new ubyte[size];
    fread(re.ptr, re.length, 1, stdin);
    return assumeUnique(re);
  }
  static void readStdIn(ref ubyte[] re){
    fread(re.ptr, re.length, 1, stdin);
  }
  ///標準出力に書き出す
  static void writeStdOut(const(void)[] data){
    fwrite(data.ptr,data.length,1,stdout);
  }
  static Thread writeStdOutWithThread(const(void)[] data){
    Thread t=new Thread(delegate void(){writeStdOut(data);});
    t.priority(t.PRIORITY_MAX);
    t.start;
    return t;
  }
}
